#ifndef DATA_CREATURE_H
#define DATA_CREATURE_H

#include <string>
#include "Common/Algebra/Transform.h"
#include "Data/Objects/CreatureDef.h"

namespace data {

	class Creature {
	public:
		Creature(
			std::string id,
			const cmn::Transform& position,
			std::string definitionFileName ) :
			m_id( id ),
			m_position( position ),
			m_definitionFileName( definitionFileName )
		{}

		Creature( const Creature& creature ) :
			m_id( creature.GetId() ),
			m_position( creature.GetPosition() ),
			m_definitionFileName( creature.GetDefinitionFileName() )
		{}

		inline const std::string GetId() const { return m_id; }
		inline void SetId( std::string id ) { m_id = id; }

		inline const cmn::Transform GetPosition() const { return m_position; }
		inline void SetPosition( const cmn::Transform& position ) { m_position = position; }

		inline const std::string GetDefinitionFileName() const { return m_definitionFileName; }
		inline void SetDefinitionFileName( std::string definitionFileName ) { m_definitionFileName = definitionFileName; }

	private:
		std::string m_id;
		cmn::Transform m_position;
		std::string m_definitionFileName;
	};

	inline bool operator == ( const Creature& a, const Creature& b ) {
		if( a.GetId() != b.GetId() ) return false;
		if( a.GetPosition() != b.GetPosition() ) return false;
		if( a.GetDefinitionFileName() != b.GetDefinitionFileName() ) return false;
		return true;
	}

	inline bool operator != ( const Creature& a, const Creature& b ) {
		return !( a == b );
	}

}
#endif
